package com.tc.kqdemo.quartz;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

@Configuration
public class QuartzConfig {

    /*//写入考勤打卡数据失败,每个小时执行一次写入
    @Qualifier(value = "1")
    @Bean
    public MethodInvokingJobDetailFactoryBean quartzDetail(TestQuartz task){
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        *//*
         *  是否并发执行
         *  例如每5s执行一次任务，但是当前任务还没有执行完，就已经过了5s了，
         *  如果此处为true，则下一个任务会执行，如果此处为false，则下一个任务会等待上一个任务执行完后，再开始执行
         *//*
        jobDetail.setConcurrent(false);//是否并发执行
        jobDetail.setName("test_quartz");// 设置任务的名字
        jobDetail.setGroup("test");// 设置任务的分组，这些属性都可以存储在数据库中，在多任务的时候使用
        jobDetail.setTargetObject(task);//为需要执行的实体类对应的对象
        jobDetail.setTargetMethod("dd_1");
        return jobDetail;
    }
    //触发器
    @Qualifier(value = "1_2")
    @Bean
    public CronTriggerFactoryBean quartaTrigger(@Qualifier("1") MethodInvokingJobDetailFactoryBean jobDetai_1){
        CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
        trigger.setJobDetail(jobDetai_1.getObject());
        trigger.setCronExpression("0 04 * * * ?");// 初始时的cron表达式    每个小时的04分钟执行一次
        //trigger.setCronExpression("30 * * * * ?");
        trigger.setName("test_quartz");// 设置任务的名字
        return trigger;
    }
    //调度工厂
    @Bean
    public SchedulerFactoryBean schedulerFactory1(@Qualifier("1_2") CronTriggerFactoryBean quartaTrigger){
        SchedulerFactoryBean bean = new SchedulerFactoryBean();
        bean.setOverwriteExistingJobs(true);
        bean.setStartupDelay(1);
        bean.setTriggers(quartaTrigger.getObject());
        return bean;
    }
*/
    //内网数据---->推送到外网服务器
    @Qualifier(value = "2")
    @Bean
    public MethodInvokingJobDetailFactoryBean quartzDetail2(TestQuartz task2){
        MethodInvokingJobDetailFactoryBean jobDetail2 = new MethodInvokingJobDetailFactoryBean();
        jobDetail2.setConcurrent(false);//是否并发执行
        jobDetail2.setName("test_quartz2");// 设置任务的名字
        jobDetail2.setGroup("test2");// 设置任务的分组，这些属性都可以存储在数据库中，在多任务的时候使用
        jobDetail2.setTargetObject(task2);//为需要执行的实体类对应的对象
        jobDetail2.setTargetMethod("sendData");
        return jobDetail2;
    }
    @Qualifier(value = "2_2")
    @Bean
    public CronTriggerFactoryBean quartaTrigger2(@Qualifier("2") MethodInvokingJobDetailFactoryBean quartzDetail2){
        CronTriggerFactoryBean trigger2 = new CronTriggerFactoryBean();
        trigger2.setJobDetail(quartzDetail2.getObject());
        trigger2.setCronExpression("0/20 * * * * ?");// 每20s执行一次
        trigger2.setName("test_quartz2");// 设置任务的名字
        return trigger2;
    }
    @Bean
    public SchedulerFactoryBean schedulerFactory2(@Qualifier("2_2") CronTriggerFactoryBean quartaTrigger2){
        SchedulerFactoryBean bean2 = new SchedulerFactoryBean();
        bean2.setOverwriteExistingJobs(true);
        bean2.setStartupDelay(1);
        bean2.setTriggers(quartaTrigger2.getObject());
        System.out.println("");
        return bean2;
    }












}
